2025-02-06

2025-02-06


πŸ“ Notes

Obsidian

Obsidian Local Graphλ₯Ό κΉ”λ”ν•˜κ²Œ 보기 μœ„ν•΄μ„  κ·Έλž˜ν”„κ°€ 트리ꡬ쑰λ₯Ό κ°€μ Έμ•Ό ν•œλ‹€. 즉, μˆœν™˜μ΄ μ—†μ–΄μ•Ό ν•œλ‹€. Index ν΄λ”μ˜ νŒŒμΌλ“€μ„ 각각의 루트둜 λ³΄μ•˜μ„ λ•Œ μžμ‹ λ¬Έμ„œλ“€λ‘œ ν–₯ν•˜λŠ” 유ν–₯κ·Έλž˜ν”„λ₯Ό 그렸을 λ•Œ parent link둜 ν–₯ν•˜λŠ” 간선이 μ‘΄μž¬ν•΄μ„œλŠ” μ•ˆλœλ‹€.

이런 μ œμ•½μ‘°κ±΄μ„ κ±Έλ©΄ 뭐가 쒋냐고? 둜컬 κ·Έλž˜ν”„μ— Incoming links와 Outgoing linksλ₯Ό 켜고 끌 수 μžˆλ‹€. λ‚˜κ°€λŠ” 참쑰와 λ“€μ–΄μ˜€λŠ” μ°Έμ‘°λ₯Ό λΆ„λ¦¬ν•˜λ©΄ 지식을 μ°ΎλŠ”λ° μž‘μŒμ„ 덜 수 μžˆμ„ 것이닀.

λ¬Όλ‘  μ˜ˆμ™ΈλŠ” λΆ„λͺ…νžˆ μžˆμ–΄μ•Όν•œλ‹€. λŒ€ν‘œμ μœΌλ‘œ Daily Notes. Daily Routine λ•Œλ¬Έμ— λͺ¨λ“  데일리 λ…ΈνŠΈλ“€μ΄ 인덱슀의 λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ–΄ 이건 ν•„ν„°λ‘œ μ²˜λ¦¬ν•΄μ£ΌλŠ” 것이 쒋을 λ“― ν•˜λ‹€.

2025-02-11

λΆ€λͺ¨κ°€ μžμ‹μ„ λ ˆνΌλŸ°μŠ€ν•˜λŠ” 것보닀 μžμ‹μ΄ λΆ€λͺ¨λ₯Ό 레퍼런슀 ν•˜λŠ” 것이 더 μžμ—°μŠ€λŸ½λ‹€. ν•˜μ§€λ§Œ 인덱슀 νŽ˜μ΄μ§€λŠ” ν•„μš”ν•œλ°? -> νƒœκ·Έλ₯Ό ν™œμš©ν•˜λ©΄ λœλ‹€. μžμ‹ νŽ˜μ΄μ§€λ“€μ€ μ „λΆ€ 인덱슀 νƒœκ·Έλ₯Ό 가지고 인덱슀 νŽ˜μ΄μ§€λ“€μ€ 두 set을 ν•©μ§‘ν•©μœΌλ‘œ μΏΌλ¦¬ν•˜μ—¬ ν‘œν˜„ν•˜λ©΄ μ™„μ „ν•œ 트리ꡬ쑰λ₯Ό κ΅¬ν˜„ν•  수 μžˆμ„ 것이닀.

μ—¬κΈ°μ„œ λ§ν•˜λŠ” 두 Set은 λ‹€μŒκ³Ό κ°™λ‹€:

  1. Tag
  2. Backlink (including frontmatter links:)

2025-02-20

인덱슀 νŽ˜μ΄μ§€λ„ μ›°μ»΄ νŽ˜μ΄μ§€μ™€ λ˜‘κ°™μ΄ PARA ꡬ쑰λ₯Ό λ„κ²Œ ν•˜λ©΄ μ–΄λ–¨κΉŒ? μ‰½κ²Œ 보면 μ›°μ»΄νŽ˜μ΄μ§€μ—μ„œ 각 인덱슀의 μ£Όμ œμ™€ μ—°κ΄€λœ λ¬Έμ„œλ“€λ§Œμ„ 필터링 ν•˜λŠ” 것이닀. 0180 Prisma πŸŒˆμ—μ„œ μ‹€ν—˜ν•΄λ³΄κ² λ‹€.

2025-02-22

2025-02-20 μ‹€ν—˜κ²°κ³Ό, μ£Όμ œμ™€ λ¬΄κ΄€ν•œ λ¬Έμ„œλ“€μ΄ 쿼리되기 μ‹œμž‘ν–ˆλ‹€. λ‹¨μˆœ 백링크λ₯Ό μ‘°νšŒν•˜λŠ” κΈ°λŠ₯은 이미 Digital Gardenμ—μ„œ μ˜΅μ…˜μ΄ 제곡이 되기 λ•Œλ¬Έμ— κ·Έ μΉœκ΅¬ν•œν…Œ 맞기고 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μžμ‹ λ¬Έμ„œλ“€μ„ λΆ„λ₯˜ν•΄μ•Ό ν•  κ²ƒμœΌλ‘œ 보인닀.

ν•œ 가지 μ•„μ΄λ””μ–΄λŠ” νƒœκ·Έλ₯Ό ν™œμš©ν•˜λŠ” 것이닀. νƒœκ·Έλ„ 계측ꡬ쑰가 κ°€λŠ₯ν•˜λ©°, ꡳ이 ν΄λ”λ‘œ 물리적인 뢄리λ₯Ό ν•˜μ§€ μ•Šλ”λΌλ„ 논리적인 뢄리가 κ°€λŠ₯해진닀. νƒœκ·Έλ‘œ dataview κ·Έλ£Ήν™”λ₯Ό ν•˜λŠ” 것이닀. 그러면 같은 계측에 ν¬ν•¨λœ λ¬Έμ„œλ“€μ€ 같은 depth에 묢일 것이닀. μ΄λ²ˆμ—” 0200 mongodb πŸ₯¬μ—μ„œ μ‹€ν—˜ν•΄λ³΄κ² λ‹€.

ksnip_20250222-194916.png

흐으으으으으으으음.... dv.listλŠ” indentation을 μ§€μ›ν•˜μ§€ μ•Šμ•„ 직접  λ₯Ό μΆ”κ°€ν•  μˆ˜λ°–μ— μ—†μ—ˆλ‹€. μ•„λž˜λŠ” μœ„μ˜ λ Œλ”λ§μ„ λ§Œλ“€μ–΄λ‚Έ dataviewjs μŠ€ν¬λ¦½νŠΈλ‹€:

let pages = dv.pages("")
    .where(p => p.file.outlinks.includes(dv.current().file.link)) // Filter documents linking to this one
    .filter(p => p.tags && p.tags.length > 0); // Ensure they have tags

let tagTree = {};

// Organize documents into a nested tag structure
pages.forEach(page => {
    page.tags.forEach(tag => {
        let parts = tag.split("/"); // Split tag by "/"
        let rootTag = parts[0]; // First part of tag (e.g., #mongodb from #mongodb/migration)
        let subPath = parts.slice(1).join("/"); // Everything after root (e.g., migration)

        if (!tagTree[rootTag]) tagTree[rootTag] = {}; // Ensure root exists
        let currentLevel = tagTree[rootTag];

        if (subPath) {
            let subParts = subPath.split("/");
            subParts.forEach((sub, index) => {
                if (!currentLevel[sub]) currentLevel[sub] = {}; // Create subtags if missing
                if (index === subParts.length - 1) {
                    if (!currentLevel[sub].docs) currentLevel[sub].docs = [];
                    currentLevel[sub].docs.push(page);
                }
                currentLevel = currentLevel[sub]; // Move deeper into the structure
            });
        } else {
            if (!currentLevel.docs) currentLevel.docs = [];
            currentLevel.docs.push(page);
        }
    });
});

function indent(count = 0) {
	return '&nbsp'.repeat(count * 8);
}

// Recursive function to render tree structure
function renderTree(tree, depth = 0) {
    for (let [tag, value] of Object.entries(tree)) {
        if (tag !== "docs") {
			// Render tag
			dv.paragraph(`${indent(depth)} #${tag}`);
			// Recursively render subtags
            renderTree(value, depth + 1);
        } else {
			// Render documents
			dv.list(value.map((doc) => `${indent(depth)} ${doc.file.link}`)); 
        }
    }
}

// Render the full tag tree
renderTree(tagTree);

Giftogether

Giftogether ImageInstanceManager#mapImage μΏΌλ¦¬λΉŒλ”κ°€ 뽑아낸 쿼리:

SELECT "funding"."fundId" AS "funding_fundId", "funding"."fundUuid" AS "funding_fundUuid", "funding"."fundTitle" AS "funding
_fundTitle", "funding"."fundCont" AS "funding_fundCont", "funding"."fundTheme" AS "funding_fundTheme", "funding"."fundPubl" AS "funding_fundPubl",
 "funding"."fundGoal" AS "funding_fundGoal", "funding"."fundSum" AS "funding_fundSum", "funding"."fundAddrRoad" AS "funding_fundAddrRoad", "funding"."fundAddrDetl" AS "funding_fundAddrDetl", "funding"."fundAddrZip" AS "funding_fundAddrZip", "funding"."fundRecvName" AS "funding_fundRecvName", "funding"."fundRecvPhone" AS "funding_fundRecvPhone", "funding"."fundRecvReq" AS "funding_fundRecvReq", "funding"."endAt" AS "funding_endAt", "funding"."regAt" AS "funding_regAt", "funding"."uptAt" AS "funding_uptAt", "funding"."defaultImgId" AS "funding_defaultImgId", "funding"."fundUser"AS "funding_fundUser", "comment"."comId" AS "comment_comId", "comment"."fundId" AS "comment_fundId", "comment"."authorId" AS "comment_authorId", "comment"."content" AS "comment_content", "comment"."regAt" AS "comment_regAt", "comment"."isMod" AS "comment_isMod", "comment"."isDel" AS "comment_isDel", "author"."userId" AS "author_userId", "author"."authId" AS "author_authId", "author"."authType" AS "author_authType", "author"."userNick" AS "author_userNick", "author"."userPw" AS "author_userPw", "author"."userName" AS "author_userName", "author"."userPhone" AS "author_userPhone", "author"."userEmail" AS "author_userEmail", "author"."userBirth" AS "author_userBirth", "author"."regAt" AS "author_regAt", "author"."uptAt" AS "author_uptAt", "author"."delAt" AS "author_delAt", "author"."defaultImgId" AS "author_defaultImgId", "author"."isAdmin" AS "author_isAdmin", "author"."userAcc" AS "author_userAcc", "authorImage"."imgId" AS "authorImage_imgId", "authorImage"."imgUrl" AS "authorImage_imgUrl", "authorImage"."imgType" AS "authorImage_imgType", "authorImage"."subId" AS "authorImage_subId", "authorImage"."creatorUserId" AS "authorImage_creatorUserId" 
 
FROM "funding" "funding" 
LEFT JOIN "comment" "comment" 
ON "comment"."fundId"="funding"."fundId" AND ("comment"."isDel" = $1) 
	
LEFT JOIN "user" "author"
ON "author"."userId"="comment"."authorId" AND ("author"."delAt" IS NULL)  
		
LEFT JOIN "image" "authorImage" 
ON 
("author"."defaultImgId" IS NOT NULL AND "authorImage"."imgId" = "author"."defaultImgId")
OR
("author"."defaultImgId" IS NULL AND "authorImage"."subId" = "author"."userId" AND "authorImage"."imgType" = $2)

WHERE "funding"."fundUuid" = $3 ORDER BY "comment"."regAt" DESC -- PARAMETERS: [false,"User","ca79d647-099f-4a25-9dd3-235f968e
fbcc"]

πŸ“… 2025-02-06 Daily Briefing

πŸš€ WHY, HOW, WHAT

였늘 ν•˜λ£¨μ˜ 동기λ₯Ό λ‹€μ‹œ μƒκ°ν•΄λ³΄λŠ” μ‹œκ°„μ„ κ°€μ Έλ΄…μ‹œλ‹€. 였늘의 신념, λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•œ 방법, 였늘의 성과에 λŒ€ν•΄μ„œ μž‘μ„±ν•΄λ΄…μ‹œλ‹€.

ν•˜λ£¨λ§Œμ— 합격 μ†Œμ‹μ„ λ“£κ²Œ 돼 μ–Όλ–¨λ–¨ν•˜λ‹€. 확신을 주지 λͺ»ν–ˆλ‹€κ³  μƒκ°ν•˜λ˜ μ°Έμ΄μ—ˆλŠ”λ° 덜μ»₯ 합격톡보λ₯Ό λ°›κ²Œ λ˜λ‹ˆ μ—¬λŸ¬ 생각이 μŠ€μΉœλ‹€. 'Giftogether ν”„λ‘œμ νŠΈμ—μ„œ λ²Œλ €λ†“μ€ 일을 쀏어담아야 ν•˜λŠ”λ°', 'prismaλž‘ elastic beanstalkλ₯Ό 곡뢀해놔야 ν•˜λŠ”λ°' 같은 생각에 μ‚¬λ‘œμž‘νžŒλ‹€. μ–΄μ°Œλκ±΄ λ‚˜μ—κ² 천운이 λ”°λ₯Έ 것이고 45λͺ… μ€‘μ—μ„œ ν•œ λͺ…이 된 κ²ƒμ΄λ‹ˆκΉ 이 기회λ₯Ό ν™•μ‹€ν•˜κ²Œ μ‚¬λ‘œμž‘μ•„μ•Ό ν•œλ‹€.

λ‹Ήμž₯ 였늘 9μ‹œ λ°˜μ— νšŒμ˜κ°€ μ˜ˆμ •λΌ μžˆμœΌλ‹ˆ λ°€λ¦° μž‘μ—… 쀑 ν•˜λ‚˜λ₯Ό λ¨Όμ € ν•΄μΉ˜μš°μž. 빨리 ν•  수 μžˆλŠ” 건 WISH-441 Event Handlers 폴더 μ •λ¦¬ν•˜λŠ” 것, WISH-391 Image Instance Manager μ„±λŠ₯ ν–₯상방법 λ„μž…ν•˜κΈ° λ”± λ‘κ°€μ§€λ§Œ ν•΄λ³΄μž.

🎡 였늘의 μΆ”μ²œκ³‘

πŸƒ 였늘의 μš΄λ™

🌞 μ˜€λŠ˜μ€...

🌜 μ–΄μ œλŠ”...

πŸ“– 였늘의 읽기λͺ©λ‘

⏰ Daily Routine

24λ…„ 12μ›”μ˜ 데일리 루틴

πŸͺ‚ PARA

PARA Expert 에 μœ„μ˜ 'Daily Briefing'을 λ³΅λΆ™ν•˜λ©΄ μžλ™μœΌλ‘œ μ•„λž˜μ˜ PARA ꡬ쑰둜 λ³€ν™˜ν•΄μ€λ‹ˆλ‹€

[Projects]

[Areas]

[Resources]

[Archive]